/*******************************************************************************
 * Name    : AbstractTestClass.cc
 * Date    : 01-17-2014
 * Author  : Sylvain Nieuwlandt -- nicholas.rush.developper@gmail.com
 ******************************************************************************/
#include "AbstractTestClass.hpp"

AbstractTestClass::AbstractTestClass() {
  this->m_className = "";

  this->m_errors = (char*) malloc(sizeof(char));
  this->m_errors[0] = '\0';

  this->m_testFailure = false;
}
/******************************************************************************/

AbstractTestClass::~AbstractTestClass() {
  free(this->m_errors);
}
/******************************************************************************/

const char* AbstractTestClass::getClassName() {
  return this->m_className;
}
/******************************************************************************/

bool AbstractTestClass::isFailed() {
  return this->m_testFailure;
}
/******************************************************************************/

char* AbstractTestClass::getErrors() {
  return this->m_errors;
}
/******************************************************************************/

void AbstractTestClass::assertNotNull(void* obj, 
				      const char* testMethod,
				      const char* errorMessage) {
  if (NULL == obj) {
    this->writeError(testMethod, errorMessage);
  }
}
/******************************************************************************/

void AbstractTestClass::writeError(const char* testMethod, 
				   const char* errorMessage) {
    int size = strlen(m_errors) + strlen(testMethod) + strlen(errorMessage) + 6;
    snprintf(m_errors, size + 1,
	     "%s\n[%s] : %s", m_errors, testMethod, errorMessage);
    m_errors[size] = '\0';
    m_testFailure = true;
}
/******************************************************************************/

void AbstractTestClass::assertFalse(KiBoolean value,
				      const char* testMethod,
				      const char* errorMessage) {
  if (KiBoolean::FALSE != value) {
    this->writeError(testMethod, errorMessage);
  }
}
/******************************************************************************/

void AbstractTestClass::assertTrue(KiBoolean value,
				      const char* testMethod,
				      const char* errorMessage) {
  if (KiBoolean::TRUE != value) {
    this->writeError(testMethod, errorMessage);
  }
}
/******************************************************************************/

void AbstractTestClass::assertFalse(bool value,
				      const char* testMethod,
				      const char* errorMessage) {
    assertFalse((value) ? KiBoolean::TRUE : KiBoolean::FALSE, 
                testMethod, errorMessage);
}
/******************************************************************************/

void AbstractTestClass::assertTrue(bool value,
				      const char* testMethod,
				      const char* errorMessage) {
   assertTrue((value) ? KiBoolean::TRUE : KiBoolean::FALSE, 
                testMethod, errorMessage);
}